<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>04-构造函数的不合理</title>
</head>

<body>
    <script>
        /*
        构造函数的不合理
          +当你在构造函数体内书写方法的时候
            =>你需要向对象上添加方法的时候
            =>只要创建一次对象（new一次）就会有一次函数在占用空间
            =>创建100次对象，会有100个一模一样的函数出现
          + 100个函数一模一样
            =>但是其实里面有99个是重复的，没用必要存在
        */

        //1.准备一个构造函数
        function Person(name, age) {
            this.name = name
            this.age = age
            this.sayHi = function () { console.log('hello world') }
            //  Person.prototype.sayHi = function () { console.log('hello world') }//console.log(p1.sayHi == p2.sayHi)结果是true}
        }
        //2.创建对象
        var p1 = new Person('Jack', '18')
        var p2 = new Person('Rose', '20')

        console.log(p1, p2)
        //调用两个对象sayHi方法
        p1.sayHi()
        p2.sayHi()
        //看一下是不是真的两个对象
        console.log(p1 == p2)//false，确实是两个对象

        //两个对象里面的函数
        console.log(p1.sayHi)
        console.log(p2.sayHi)
        console.log(p1.sayHi == p2.sayHi)//false，确实是两个函数

        
          var p1 = new Person('Jack', '18')
          var p2 = new Person('Rose', '20')


         /* 
         p1 第一次执行 Person函数
            =>h会把函数内部的this指向p1
            =>会把函数体内代码全部执行一遍
            =>向p1上添加name属性
            =>向p1上添加age属性
            =>向p1上添加sayHi方法，会创建一个函数出来

           p2 第二次执行 Person函数
            =>h会把函数内部的this指向p2
            =>会把函数体内代码全部执行一遍
            =>向p2上添加name属性
            =>向p2上添加age属性
            =>向p2上添加sayHi方法，会创建一个函数出来
             */
        
    </script>
</body>
</html>